In [1]:
import pandas as pd
linkData="https://github.com/SocialAnalytics-StrategicIntelligence/TableOperations/raw/main/dengue_ok.pkl"
dengue = pd.read_pickle(linkData)
# checking format
dengue.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 501236 entries, 0 to 501235 Data columns (total 9 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 departamento 501236 non-null object 1 provincia 501236 non-null object 2 distrito 501236 non-null object 3 ano 501236 non-null int64 4 semana 501236 non-null int64 5 sexo 501236 non-null object 6 edad 501236 non-null int64 7 enfermedad 501236 non-null category 8 case 501236 non-null int64 dtypes: category(1), int64(4), object(4) memory usage: 31.1+ MB
In [2]:
# Each row is a person:
dengue.head()
Out[2]:
| departamento | provincia | distrito | ano | semana | sexo | edad | enfermedad | case | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | HUANUCO | LEONCIO PRADO | LUYANDO | 2000 | 47 | M | 9 | SIN_SEÑALES | 1 |
| 1 | HUANUCO | LEONCIO PRADO | LUYANDO | 2000 | 40 | F | 18 | SIN_SEÑALES | 1 |
| 2 | HUANUCO | LEONCIO PRADO | JOSE CRESPO Y CASTILLO | 2000 | 48 | F | 32 | SIN_SEÑALES | 1 |
| 3 | HUANUCO | LEONCIO PRADO | JOSE CRESPO Y CASTILLO | 2000 | 37 | F | 40 | SIN_SEÑALES | 1 |
| 4 | HUANUCO | LEONCIO PRADO | MARIANO DAMASO BERAUN | 2000 | 42 | M | 16 | SIN_SEÑALES | 1 |
In [3]:
# some exploration
dengue.describe().apply(lambda s: s.apply('{0:.5f}'.format))
Out[3]:
| ano | semana | edad | case | |
|---|---|---|---|---|
| count | 501236.00000 | 501236.00000 | 501236.00000 | 501236.00000 |
| mean | 2014.77213 | 21.99838 | 28.96143 | 1.00000 |
| std | 6.14646 | 14.76658 | 18.15954 | 0.00000 |
| min | 2000.00000 | 1.00000 | 0.00000 | 1.00000 |
| 25% | 2011.00000 | 11.00000 | 15.00000 | 1.00000 |
| 50% | 2016.00000 | 18.00000 | 26.00000 | 1.00000 |
| 75% | 2020.00000 | 32.00000 | 41.00000 | 1.00000 |
| max | 2022.00000 | 53.00000 | 106.00000 | 1.00000 |
In [4]:
# exploring
dengue.enfermedad.value_counts()
Out[4]:
enfermedad SIN_SEÑALES 443996 ALARMA 54981 GRAVE 2259 Name: count, dtype: int64
Better labels:
In [5]:
dengue['enfermedad_text']=dengue.enfermedad.astype(str)
dengue.replace({'enfermedad_text':{'SIN_SEÑALES':'1_SIN_SEÑALES','ALARMA':'2_ALARMA','GRAVE':'3_GRAVE'}},inplace=True)
In [6]:
# exploring
dengue.ano.value_counts(sort=False)
Out[6]:
ano 2000 5557 2001 23526 2002 8086 2003 3349 2004 9547 2005 5640 2006 4022 2007 6344 2008 12824 2009 13407 2010 16842 2011 28084 2012 28505 2013 13092 2015 35816 2014 17234 2016 25160 2017 68279 2018 4698 2019 15287 2020 47932 2021 44791 2022 63214 Name: count, dtype: int64
Discretizing:
In [7]:
binLimits=[0,15,50,110]
theLabels=["a_menor_a_16","b_entre_16y50","c_mayor_a_50"]
dengue["edad_grupos"]=pd.cut(dengue['edad'], include_lowest=True,
bins=binLimits,
labels=theLabels,
ordered=True)
# see
dengue.head()
Out[7]:
| departamento | provincia | distrito | ano | semana | sexo | edad | enfermedad | case | enfermedad_text | edad_grupos | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | HUANUCO | LEONCIO PRADO | LUYANDO | 2000 | 47 | M | 9 | SIN_SEÑALES | 1 | 1_SIN_SEÑALES | a_menor_a_16 |
| 1 | HUANUCO | LEONCIO PRADO | LUYANDO | 2000 | 40 | F | 18 | SIN_SEÑALES | 1 | 1_SIN_SEÑALES | b_entre_16y50 |
| 2 | HUANUCO | LEONCIO PRADO | JOSE CRESPO Y CASTILLO | 2000 | 48 | F | 32 | SIN_SEÑALES | 1 | 1_SIN_SEÑALES | b_entre_16y50 |
| 3 | HUANUCO | LEONCIO PRADO | JOSE CRESPO Y CASTILLO | 2000 | 37 | F | 40 | SIN_SEÑALES | 1 | 1_SIN_SEÑALES | b_entre_16y50 |
| 4 | HUANUCO | LEONCIO PRADO | MARIANO DAMASO BERAUN | 2000 | 42 | M | 16 | SIN_SEÑALES | 1 | 1_SIN_SEÑALES | b_entre_16y50 |
The surface:
In [8]:
pd.crosstab( dengue.enfermedad_text,dengue.edad_grupos, dropna=False, normalize='columns')
Out[8]:
| edad_grupos | a_menor_a_16 | b_entre_16y50 | c_mayor_a_50 |
|---|---|---|---|
| enfermedad_text | |||
| 1_SIN_SEÑALES | 0.876868 | 0.890247 | 0.884549 |
| 2_ALARMA | 0.119010 | 0.105475 | 0.109204 |
| 3_GRAVE | 0.004122 | 0.004278 | 0.006248 |
In [9]:
pd.crosstab(dengue.enfermedad_text,[dengue.sexo,dengue.edad_grupos], dropna=False, normalize='columns')
Out[9]:
| sexo | F | M | ||||
|---|---|---|---|---|---|---|
| edad_grupos | a_menor_a_16 | b_entre_16y50 | c_mayor_a_50 | a_menor_a_16 | b_entre_16y50 | c_mayor_a_50 |
| enfermedad_text | ||||||
| 1_SIN_SEÑALES | 0.875221 | 0.884646 | 0.881328 | 0.878431 | 0.897139 | 0.888295 |
| 2_ALARMA | 0.120614 | 0.110622 | 0.113616 | 0.117488 | 0.099142 | 0.104073 |
| 3_GRAVE | 0.004165 | 0.004731 | 0.005057 | 0.004081 | 0.003720 | 0.007633 |
Yearly look¶
In [10]:
# for colab
# !pip install altair -U
# # !pip install "vegafusion-jupyter[embed]"
In [11]:
import altair as alt
alt.data_transformers.enable("vegafusion")
Out[11]:
DataTransformerRegistry.enable('vegafusion')
In [12]:
alt_dengue=alt.Chart(dengue)
enc_dengue=alt_dengue.encode(
x='ano:T',
y='mean(edad):Q',
color='enfermedad_text:N',
)
enc_dengue.mark_line() + enc_dengue.mark_errorband()
Out[12]:
